package com.stars.questions.deptQuestion.config.controller;

import com.alibaba.fastjson2.JSONObject;
import com.stars.base.constants.CommonNumberConstants;
import com.stars.base.entity.Result;
import com.stars.questions.deptQuestion.config.entity.Question;
import com.stars.questions.deptQuestion.config.entity.QuestionConfigDTO;
import com.stars.questions.deptQuestion.config.service.QuestionConfigService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/10/1 23:39
 * @description : 问题配置控制器
 */
@RestController
@RequestMapping("/questionConfig")
public class QuestionConfigController {

    private final QuestionConfigService configService;

    public QuestionConfigController(QuestionConfigService configService) {
        this.configService = configService;
    }

    /**
     * 加载问卷调查列表
     * @author : Rocks
     * @date :  2023/2/27 20:11
     * @param dto 查询条件
     * @return Result
     */
    @RequestMapping("/data")
    public Result getListData(@RequestBody QuestionConfigDTO dto) {
        return Result.success(configService.data(dto));
    }

    /**
     * 根据问卷ID获取问卷实体
     * @author : Rocks
     * @date :  2023/2/27 20:12
     * @param id 问卷ID
     * @return Result
     */
    @RequestMapping("/getQuestionConfig")
    public Result getQuestionConfig(String id){
        return Result.success(configService.loadQuestion(id));
    }

    /**
     * 检验指定年度是否有已发布问卷
     * @author : Rocks
     * @date :  2023/2/27 20:12
     * @param year 调查年度
     * @return Result
     */
    @PostMapping("/check")
    public Result check(String year){
        return Result.result(configService.check(year));
    }

    /**
     * 发布/取消发布问卷
     * @author : Rocks
     * @date :  2023/2/27 20:13
     * @param id 问卷ID
     * @param type 1-发布 2-取消发布
     * @return Result
     */
    @PostMapping("/publish")
    public Result publish(String id, String type){
        if(CommonNumberConstants.ONE_STR.equals(type)){
            JSONObject result = configService.publish(id);
            if(result.getBoolean("result")){
                return Result.success();
            }
            return Result.error(result.getString("msg"));
        }else if(CommonNumberConstants.MINUS_ONE_STR.equals(type)){
            return Result.result(configService.unPublish(id));
        }
        return  Result.error("未知操作类型");
    }

    /**
     * 保存问卷信息
     * @author : Rocks
     * @date :  2023/2/27 20:14
     * @param bean 问卷调查实体Bean
     * @return Result
     */
    @PostMapping("/save")
    public Result save(@RequestBody Question bean){
        return Result.result(configService.save(bean));
    }

    /**
     * 删除调查问卷
     * @author : Rocks
     * @date :  2023/2/27 20:14
     * @param id 要删除问卷主键
     * @return Result
     */
    @PostMapping("/delRecord")
    public Result delRecord(String id){
        return Result.success(configService.delRecord(id));
    }

    /**
     * 删除调查问卷中的部门
     * @author : Rocks
     * @date :  2023/2/27 20:19
     * @param subId 要删除子表记录ID
     * @return Result
     */
    @PostMapping("/deleteSub")
    public Result deleteSub(String subId){
        return Result.success(configService.deleteSub(subId));
    }

    /**
     * 部门初始化
     * @author : Rocks
     * @date :  2023/2/27 20:19
     * @param id 要初始化问卷的主键
     * @return Result
     */
    @PostMapping("/initDept")
    public Result initDept(String id){
        return Result.result(configService.initDept(id));
    }

}
